home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / mimetools.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  7KB  |  251 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import os
  5. import rfc822
  6. import tempfile
  7. __all__ = [
  8.     'Message',
  9.     'choose_boundary',
  10.     'encode',
  11.     'decode',
  12.     'copyliteral',
  13.     'copybinary']
  14.  
  15. class Message(rfc822.Message):
  16.     
  17.     def __init__(self, fp, seekable = 1):
  18.         rfc822.Message.__init__(self, fp, seekable)
  19.         self.encodingheader = self.getheader('content-transfer-encoding')
  20.         self.typeheader = self.getheader('content-type')
  21.         self.parsetype()
  22.         self.parseplist()
  23.  
  24.     
  25.     def parsetype(self):
  26.         str = self.typeheader
  27.         if str is None:
  28.             str = 'text/plain'
  29.         
  30.         if ';' in str:
  31.             i = str.index(';')
  32.             self.plisttext = str[i:]
  33.             str = str[:i]
  34.         else:
  35.             self.plisttext = ''
  36.         fields = str.split('/')
  37.         for i in range(len(fields)):
  38.             fields[i] = fields[i].strip().lower()
  39.         
  40.         self.type = '/'.join(fields)
  41.         self.maintype = fields[0]
  42.         self.subtype = '/'.join(fields[1:])
  43.  
  44.     
  45.     def parseplist(self):
  46.         str = self.plisttext
  47.         self.plist = []
  48.         while str[:1] == ';':
  49.             str = str[1:]
  50.             if ';' in str:
  51.                 end = str.index(';')
  52.             else:
  53.                 end = len(str)
  54.             f = str[:end]
  55.             if '=' in f:
  56.                 i = f.index('=')
  57.                 f = f[:i].strip().lower() + '=' + f[i + 1:].strip()
  58.             
  59.             self.plist.append(f.strip())
  60.             str = str[end:]
  61.  
  62.     
  63.     def getplist(self):
  64.         return self.plist
  65.  
  66.     
  67.     def getparam(self, name):
  68.         name = name.lower() + '='
  69.         n = len(name)
  70.         for p in self.plist:
  71.             if p[:n] == name:
  72.                 return rfc822.unquote(p[n:])
  73.                 continue
  74.         
  75.  
  76.     
  77.     def getparamnames(self):
  78.         result = []
  79.         for p in self.plist:
  80.             i = p.find('=')
  81.             if i >= 0:
  82.                 result.append(p[:i].lower())
  83.                 continue
  84.         
  85.         return result
  86.  
  87.     
  88.     def getencoding(self):
  89.         if self.encodingheader is None:
  90.             return '7bit'
  91.         
  92.         return self.encodingheader.lower()
  93.  
  94.     
  95.     def gettype(self):
  96.         return self.type
  97.  
  98.     
  99.     def getmaintype(self):
  100.         return self.maintype
  101.  
  102.     
  103.     def getsubtype(self):
  104.         return self.subtype
  105.  
  106.  
  107.  
  108. try:
  109.     import thread
  110. except ImportError:
  111.     import dummy_thread as thread
  112.  
  113. _counter_lock = thread.allocate_lock()
  114. del thread
  115. _counter = 0
  116.  
  117. def _get_next_counter():
  118.     global _counter
  119.     _counter_lock.acquire()
  120.     _counter += 1
  121.     result = _counter
  122.     _counter_lock.release()
  123.     return result
  124.  
  125. _prefix = None
  126.  
  127. def choose_boundary():
  128.     global _prefix
  129.     import time as time
  130.     if _prefix is None:
  131.         import socket as socket
  132.         
  133.         try:
  134.             hostid = socket.gethostbyname(socket.gethostname())
  135.         except socket.gaierror:
  136.             hostid = '127.0.0.1'
  137.  
  138.         
  139.         try:
  140.             uid = repr(os.getuid())
  141.         except AttributeError:
  142.             uid = '1'
  143.  
  144.         
  145.         try:
  146.             pid = repr(os.getpid())
  147.         except AttributeError:
  148.             pid = '1'
  149.  
  150.         _prefix = hostid + '.' + uid + '.' + pid
  151.     
  152.     return '%s.%.3f.%d' % (_prefix, time.time(), _get_next_counter())
  153.  
  154.  
  155. def decode(input, output, encoding):
  156.     if encoding == 'base64':
  157.         import base64
  158.         return base64.decode(input, output)
  159.     
  160.     if encoding == 'quoted-printable':
  161.         import quopri as quopri
  162.         return quopri.decode(input, output)
  163.     
  164.     if encoding in ('uuencode', 'x-uuencode', 'uue', 'x-uue'):
  165.         import uu as uu
  166.         return uu.decode(input, output)
  167.     
  168.     if encoding in ('7bit', '8bit'):
  169.         return output.write(input.read())
  170.     
  171.     if encoding in decodetab:
  172.         pipethrough(input, decodetab[encoding], output)
  173.     else:
  174.         raise ValueError, 'unknown Content-Transfer-Encoding: %s' % encoding
  175.  
  176.  
  177. def encode(input, output, encoding):
  178.     if encoding == 'base64':
  179.         import base64
  180.         return base64.encode(input, output)
  181.     
  182.     if encoding == 'quoted-printable':
  183.         import quopri
  184.         return quopri.encode(input, output, 0)
  185.     
  186.     if encoding in ('uuencode', 'x-uuencode', 'uue', 'x-uue'):
  187.         import uu
  188.         return uu.encode(input, output)
  189.     
  190.     if encoding in ('7bit', '8bit'):
  191.         return output.write(input.read())
  192.     
  193.     if encoding in encodetab:
  194.         pipethrough(input, encodetab[encoding], output)
  195.     else:
  196.         raise ValueError, 'unknown Content-Transfer-Encoding: %s' % encoding
  197.  
  198. uudecode_pipe = '(\nTEMP=/tmp/@uu.$$\nsed "s%^begin [0-7][0-7]* .*%begin 600 $TEMP%" | uudecode\ncat $TEMP\nrm $TEMP\n)'
  199. decodetab = {
  200.     'uuencode': uudecode_pipe,
  201.     'x-uuencode': uudecode_pipe,
  202.     'uue': uudecode_pipe,
  203.     'x-uue': uudecode_pipe,
  204.     'quoted-printable': 'mmencode -u -q',
  205.     'base64': 'mmencode -u -b' }
  206. encodetab = {
  207.     'x-uuencode': 'uuencode tempfile',
  208.     'uuencode': 'uuencode tempfile',
  209.     'x-uue': 'uuencode tempfile',
  210.     'uue': 'uuencode tempfile',
  211.     'quoted-printable': 'mmencode -q',
  212.     'base64': 'mmencode -b' }
  213.  
  214. def pipeto(input, command):
  215.     pipe = os.popen(command, 'w')
  216.     copyliteral(input, pipe)
  217.     pipe.close()
  218.  
  219.  
  220. def pipethrough(input, command, output):
  221.     (fd, tempname) = tempfile.mkstemp()
  222.     temp = os.fdopen(fd, 'w')
  223.     copyliteral(input, temp)
  224.     temp.close()
  225.     pipe = os.popen(command + ' <' + tempname, 'r')
  226.     copybinary(pipe, output)
  227.     pipe.close()
  228.     os.unlink(tempname)
  229.  
  230.  
  231. def copyliteral(input, output):
  232.     while None:
  233.         line = input.readline()
  234.         if not line:
  235.             break
  236.         
  237.         continue
  238.         return None
  239.  
  240.  
  241. def copybinary(input, output):
  242.     BUFSIZE = 8192
  243.     while None:
  244.         line = input.read(BUFSIZE)
  245.         if not line:
  246.             break
  247.         
  248.         continue
  249.         return None
  250.  
  251.